home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Interactive Reference Guide
/
C-C++ Interactive Reference Guide.iso
/
c_ref
/
csource2
/
sclib_1
/
1_6
/
v7n6051a.txt
< prev
next >
Wrap
Text File
|
1995-11-01
|
1KB
|
64 lines
Listing 2
/*
clipLine() = draws the portion of a line that is
within specified boundaries
*/
void clipLine(int x1,int y1,int x2,int y2,int color)
{
int xa,ya,xb,yb;
if (x1 < x2)
{
xa = x1;
ya = y1;
xb = x2;
yb = y2;
}
else
{
xa = x2;
ya = y2;
xb = x1;
yb = y1;
}
if ((xa > xmax) || (xb < xmin))
return(0);
if (xa < xmin)
{
ya = ya + (long)(xmin - xa)*(yb - ya)/(xb - xa);
xa = xmin;
}
if (ya < ymin)
{
xa = xa + (long)(ymin - ya)*(xb - xa)/(yb - ya);
ya = ymin;
}
if (ya > ymax)
{
xa = xa + (long)(ymax - ya)*(xb - xa)/(yb - ya);
ya = ymax;
}
if (xb > xmax)
{
yb = ya + (long)(xmax - xa)*(yb - ya)/(xb - xa);
xb = xmax;
}
if (yb < ymin)
{
xb = xa + (long)(ymin - ya)*(xb - xa)/(yb - ya);
yb = ymin;
}
if (yb > ymax)
{
xb = xa + (long)(ymax - ya)*(xb - xa)/(yb - ya);
yb = ymax;
}
drawLine(xa,ya,xb,yb,color);
}